突撃!隣の開発環境 パート2【Retty編】
こんにちは!おおはしりきたけです。今回も突撃!隣の開発環境というタイトルでイケてる開発会社さんの開発環境についてインタビューさせてもらいました。第2弾として、実名グルメサービスで今凄く勢いのあるRettyさんに訪問させてもらいました。インタビューに答えていただいたのはCTOの樽石さん、iOSエンジニアの櫻井さん、Androidエンジニアの新井さん、インフラエンジニアの梅田さんです。
突撃!隣の開発環境とは
前回も書きましたが、技術事例やノウハウなどは、ブログや勉強会などで共有されることが多いと思います。しかし、各社の開発環境や開発体制などは意外と共有されていないこと多いと思います。ノウハウの流出になるかもしれませんが、それ以上に、より良い開発を目指している会社さん同士で情報交換を行い、良いチーム、良いプロダクトを作っていくという志の会社さんの為の情報共有のための企画になります。開発環境や開発体制なども技術領域によっても変わってくると思いますが、この突撃!隣のシリーズでは様々な会社さんのイケてるツールの使い方や、仕事が捗る開発体制についてインタビューを行っていく予定です。
Retty紹介
どんなことをやっているのか?
Rettyさんは「食を通じて世界中の人々を Happy に」というビジョンを掲げており、Rettyグルメという信頼できる「人」のおすすめからレストランを探せる新しいグルメサービスを展開しています。様々なグルメサービスが展開されていますが、Rettyの月間ユーザ数は 3ヶ月連続で単月100万人増を達成しており、先日は月間900万人を達成しました。また、年内にも北米およびアジア進出を目指す。海外進出、そして組織体制強化に向けて10億円の資金調達など、ビジネス的にも勢いある会社さんです。
開発環境について
まずは、Rettyさんの開発環境について色々と伺っていこうかと思います。
システム構成
システム構成は、以下の様な構成になっています。サーバーは、全てAWSで構築されており、サーバーサイドの言語はPHPがメインとのことですが、node等も使われており、PHPのフレームワークはZendFramework、ZendFramework2等を利用しているとのことでした。データを非常に重要にしており、ログ収集の為にfluentdやTreasure Data、データ分析の為にEMRを利用しているというのが特徴的だと思います。
また、ElasticBeanstalkを使っているとことも特徴だとおもいます。
開発端末
Rettyさんも基本的にほぼ全員Macを使っているとのことでした。もちろん必要な人にはモニタも支給されていました。オフィスは、仕切りがなく非常に開放感があり、ほとんどがフリーアドレスの座席で、チームで集中した場合には、半個室の集中するためのスペースがあります。
解放感のある広いオフィス。実際は写真よりももっと広いです!
コミュニケーションツール
プロジェクトを円滑にするために様々なコミュニケーションツールを使うことになります。チャットやチケットの管理、仕様の共有などどのように行っているのか聞いてみました。
チャットツール
RettyさんもSlackを活用しているとのことでした。社内専用と外部の人も含めたルームがあり、2つで運用しているとのことでした。議論が起きるとすぐチャンネルが作成されるということで、社内のPublicなチャンネルは190程度あるとのことでした。アクティブなチャンネルは、20〜30程度ということでした。github、zendesk、Crashlyticsなどのツールと連携しており、ChatOpsを実現しているためHubotと連携しているとのことです。
議論が起きると、その議題に対してチャンネルが作られるということで、効果的な使い方なのかなと思いました。通常時のチャンネルで議論が起こると関係ない人はログを追うのも大変ですし、通常のチャンネルのログが大変なことになるので良い使い方だなと思いました。
プロジェクト管理ツール
githubのissueを使ったり、ポストイット等をタスクカンバン管理しているとのことでした。デジタルカンバンと違い、ポストイットのカンバンは常に見えるところになるので、一覧性が優れているので、非常に有用だと思います。
仕様の共有方法
APIなどの仕様についてはソースコードが仕様になっているということです。もちろんgithubのissueにも記載しているということでしたが、ソースコード読めない人とか、API仕様の認識のズレとか出ないのか?という質問をした所、Rettyのエンジニアさんはスマホアプリだけではなく全員サーバーサイドのコードも書けるということで同じ人が作るので、仕様に齟齬がでないということで非常に納得しました。「ソースコードが仕様」と言われることが多いですが、実際エンジニアさんのスキルもあり、コミュニケーションも密に取れているので、それを体現できていると思います。
wiki や日報のツールとしてQiitaTeamを使っており、ツールやAWSのコマンドなどの情報も共有しているということでした。
リポジトリ
こちらもgithubです。リポジトリ数は20個位で、運用フローについては、チームによって変わることもありますが、Pull Requestを送りレビューを行います。レビュー担当は今までは決まっていましたが、エンジニアも増えてきたので、レビュアーの負荷も高くなってきたので、現在は、相互チェックできるようにしているようです。
iOSアプリは半年前にリポジトリを移動し、半年でもコミット数が3600ということでリニューアルに向け頻繁にコミットが行われていたことがわかります。
自動化ツール
CI環境は、CircleCIやJenkinsを利用しているということで、インフラは上記にも記載しましたがChatOpsを実現しているためHubotを利用し、ElasticBeanstalkでgit aws.pushを使ってgitリポジトリをそのままデプロイしているとのことでした。Rettyは毎日デプロイ行っており、その為にもgitのリポジトリがそのままデプロイできるElasticBeanstalkは非常に有効な環境だと思います。ビジネス側はDockerを利用しているということでした。
デザインツール
ベースはやはりPhotoshop、Illustratorなどを利用しているということです。プロトタイプ作成の為にProttを使っており、デザイナさんとのやりとりは、DropBoxでファイルのやりとりを行っていたり、Photoshopで開いているキャンバスをスマートフォンでリアルタイムプレビュー出来るアプリSkala Previewを使っているということでした。
iOSとAndroidのデザインの進め方としてはiOSを先に行い、同じデザイナさんがAndroidも別途デザインするということでした。iOSとAndroidのUIは、フラットという点では似ていますが、根本的に違うものなのでしっかりと両方デザインを行っているというもの重要だと思います。
開発体制
開発チーム
Rettyのサービスは大きく2つあり、一般のユーザーが利用するRettyグルメをメディア、店舗などが利用するビジネスという2つのサービス構成に分かれています。Rettyのエンジニアさんの内訳は以下になります。
- Webエンジニア:6名
- iOSエンジニア:3名
- Androidエンジニア:2名
- インフラエンジニア:1名
- デザイナ:3名
※上記は正社員の人数で、その他にパートナーさんやアルバイトの方含めると人数はもう少し多くなります。
1日の動き
1日の動きはチーム毎にもっとも効果的な方法で行っていますが、例えば、あるチームでは、9時30分に始業し、各チームで10時から朝会、18時から夕会を行っているということで、仕様の確認などは、ディレクターとエンジニア同士席も近いので、直接話しをしながら細かい打合せを行っているそうです。
開発チームについて
縦軸としてメディアとビジネスという2つの大きなセクションに分かれており、メディアについては、SEO(データ分析等を主にやるチーム)とアプリというチームに分かれています。デプロイは障害一次受担当者(現在は梅田さん)が行っており、毎日決まった時間にデプロイを行っています。Rettyさんはリモート勤務も可能で、オンラインでも会話も多いとのことでした。
写真はiOSチーム。半個室の集中ルームでチームのコミュニケーションを高めます
開発プロセスについて
開発プロセスは明確には決まっておらず、チーム内でそれぞれやりやすいやり方で進めているとのことでした。プロダクトについてどう開発を進めていっているのかというと、数字を非常に重要にしており、ディレクターが機能追加等を考える為に効果測定を行ったり、ユーザー体験を数字で見て、悪い場合は機能改善を行うための施策を行っていくということでした。
iOSチームはタスクカンバンを使ってやっていたり、Androidチームはリモートの人も多いため、基本オンラインで開発を進めていくということでした。明確にプロセスを決めず、チームによって柔軟にやり方を変えているということでした。
コミュニケーションについて
QiitaTeamを利用し、日報を書いてたり、Tipsをまとめたりしているということで、日報というと上長に報告のためと思いがちですが、Rettyさんの日報はやったこと、困り事を書いて投稿しておくと、必ず誰かが見てくれていて、自然発生的に困り事の解決など行われるということでした。話を聞くとRettyさんも自己組織化がされており、目的の為に全員が協力しながらコミュニケーションをとっているという感じでした。ビジョンとカルチャーが浸透しているからだと思います。
写真はランチミーティング。業務だけじゃなく、日々のコミュニケーションを活性化するためランチミーティングなども行われています。
テストについて
iOSは、CircleCIからfastlaneを使って、Expecta、OHHTTPStubs、OCMockを使って自動テストを回しており、AndroidはJenkinsでJunitを使ってテストコードを書いて自動テストを行っているとのことでした。サーバー側に関しては、MIHARU ちゃんという独自のツールでテストを自動化しているということでした。ツールでの自動テストもやっていますが、人が確認を行うヒューマンテストも必ず行っており、変更点を把握している人がキッチリテストを行うということも重要にしているということでした。またViewについてはRettyさんも変更が多いので、今は自動化などはしていないということでした。
その他
Rettyさんはコミュニケーションを凄く大切にしているように感じました。コミュニケーション活性化のためにいくつかの施策を実施しています。
ランチ自転車
中途社員が8割を超えるRettyさんでは、コミュニケーションを図るために、食べたいランチを他の社員とともに自転車で移動するという仕組みになります。この取り組みは先日のワールドビジネスサテライトでも特集されていました。
Retty Tech Cafe
CTOの樽石さんに伺った所、技術力を上げるためにRetty Tech Cafeという社外に向けた勉強会を開催しています。勉強会で発表することで、勉強会ドリブンで技術力向上につながるということでした。この考え方は弊社にも非常に似ており、行動することで身になると思います。また、社内ではコーヒーセッションと言う形で毎週社内勉強会が開かれており、エンジニア以外の方も発表することが多いそうです。
Retty Tech Cafeは今まではドコモベンチャーさんの会場をお借りしていたということですが、移転をしオフィスも広くなったのでこれからは自社で開催を行うとのことでした。またカフェと言う名前をつけることで、勉強会の場所をお貸しすることもできるとのことでした。弊社もDevelopers.IOカフェと言う名前でイベント開きたいです。
8階には勉強会用の大きなスペースがあります。6月には大規模な内装工事を行うということでさらに素敵な空間に仕上がるそうです。
今回登場したツール
コミュニケーション
- チャット:Slack
- リポジトリ:github
- タスクカンバン:ポスト・イット
- wiki:Qiita:Team
自動化
テスト
監視
- カスタマーサービス:Zendesk
- ログ収集:fluentd、Tresure Data
- クラッシュレポート:Crashlytics
デザイン
- リアルタイムプレビューツール:Skala Preview
- プロトタイピングツール:Prott
- ファイル共有:DropBox
※Rettyさんでは、上記以外にも様々なツールを利用しております。上記はインタビュー時に伺った内容のものを記載しています。
まとめ
第2回目はRettyさんにインタビューさせてもらいました。食を通じて世界をHappyにをビジョンにしているだけあり、社員の皆さん食が大好きな感じが伝わってきました。以前、毎月15日に開催される「イイゴハンの会」にもおじゃまさせていただきましたが、皆さんおもてなしを大切にしており、それがエンジニアリングにも伝わっているんだろうな〜と感じました。リモートワークも可能ですが、オフィスを移転しオフィス環境を良くすることにより「リモートワークに勝つオフィス」を目指しているというのが印象的でした。エンジニアが働くために良い環境を提供し、その結果良いサービスづくりにつながるんでしょうね。
最後に写真を取らせていただきました。左から樽石さん、櫻井さん、梅田さん、新井さん、そして私です。お忙しいところありがとうございました!!
次回は、隣のではなく、ウチのということでクラスメソッドに取材します。
参考リンク
http://prtimes.jp/main/html/rd/p/000000017.000004025.html
http://www.mote-ch.com/column/retty
http://www.slideshare.net/shotaumeda1/devawsdev-ops